class Solution {
public:
    int dx[8]={0,0,1,-1,1,1,-1,-1};
    int dy[8]={1,-1,0,0,1,-1,1,-1};
    int m,n;
    vector<vector<char>> updateBoard(vector<vector<char>>& b, vector<int>& c)  {
        m=b.size();
        n=b[0].size();
        int i=c[0];
        int j=c[1];
        if(b[i][j]=='M')
        {
            b[i][j]='X';
            return b;
        }
        
        dfs(b,i,j);
        return b;
    }
    void dfs(vector<vector<char>>& b,int i,int j)
    {
        int count=0;
        for(int k=0;k<8;++k)
        {
            int x=dx[k]+i;
            int y=dy[k]+j;
            if(x>=0&&y>=0&&x<m&&y<n&&
            b[x][y]=='M')
            {
                b[i][j]='X';
                count++;
            }
        }

        if(count)
        {
            b[i][j]=count+'0';
            return;
        }

        b[i][j]='B';

        for(int k=0;k<8;++k)
        {
            int x=dx[k]+i;
            int y=dy[k]+j;
            if(x>=0&&y>=0&&x<m&&y<n&&
            b[x][y]=='E')
            {
                dfs(b,x,y);
            }
            else if(x>=0&&y>=0&&x<m&&y<n&&
            b[x][y]=='M')
            {
                return;
            }
        }
    }
};
